<template>
	<view class="index-list-masterfilter">
		<view class="index-list-masterfilter-header">
			筛选
		</view>
		<view class="index-list-masterfilter-main">
			<u-cell-item title="所在城市" :value="city" :arrow="true" arrow-direction="right"
				@click="changeCity()"></u-cell-item>
			<u-cell-item title="区域筛选" :value="area" :arrow="true" arrow-direction="right"
				@click="changeArea()"></u-cell-item>
			<u-cell-item title="距离" :value="distance" :arrow="true" arrow-direction="right"
				@click="changeDistance()"></u-cell-item>
		</view>
		<view class="index-list-masterfilter-footer u-flex u-row-center">
			<view class="public-btn public-btn-color">
				确定
			</view>
		</view>
		<!-- 所在城市 -->
		<u-picker mode="selector" v-model="cityshow" :range="cityList" range-key="name" :default-selector="cityIndex">
		</u-picker>
		<!-- 区域筛选 -->
		<u-picker mode="selector" v-model="areashow" :range="areaList" range-key="name" :default-selector="[0]">
		</u-picker>
		<!-- 距离 -->
		<u-picker mode="selector" v-model="distanceshow" :range="distanceList" range-key="name" :defaultIndex="[0]">
		</u-picker>
	</view>
</template>

<script>
//这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）
export default {
	// 组件名称
	name: 'demo',
	// 组件参数 接收来自父组件的数据
	props: {},
	// 局部注册的组件,import引入的组件需要注入到对象中才能使用
	components: {},
	// 组件状态值
	data() {
		return {
			cityshow: false,
			areashow: false,
			distanceshow: false,
			provinceList: [],
			cityList: [],
			areaList: [],
			distanceList: [
				{
					name: '1km',
					id: 1
				},
				{
					name: '2km',
					id: 2
				},
				{
					name: '3km',
					id: 3
				},
				{
					name: '4km',
					id: 4
				},
			],
			province: '',
			city: '',
			area: '不限',
			distance: '不限',
			cityIndex: [],
			location: {
				lat: '',
				lng: ''
			},
			list: []
		}
	},
	// 计算属性
	computed: {},
	// 侦听器
	watch: {},
	// 组件方法
	methods: {
		changeCity() {
			this.cityshow = true
		},
		changeArea() {
			this.areashow = true
		},
		changeDistance() {
			this.distanceshow = true
		},
		// 获取省
		getProvince() {
			this.$http('config.area', {}, '').then(res => {
				// console.log(res, 'res')
				this.provinceList = res.data
				this.getLocation() // 获取当前位置
			})
		},
		// 获取地区
		getCity(item) {
			this.$http('config.area', {
				pid: item.id
			}, '').then(res => {
				// console.log(res, 'res')
				this.cityList = res.data
				this.cityList.unshift({
					id: '',
					name: '不限'
				})
				this.cityList.filter((item, index) => {
					if (item.name === this.city) {
						this.cityIndex = [index]
						this.getArea(item)
					}
				})
			})
		},
		// 获取区域
		getArea(item) {
			this.$http('config.area', {
				pid: item.id
			}, '').then(res => {
				console.log(res, 'res')
				this.areaList = res.data
				this.areaList.unshift({
					id: '',
					name: '不限'
				})
				console.log(this.areaList, 'this.areaList')
				this.$forceUpdate()
			})
		},
		//获取当前位置
		getLocation() {
			let location = {
				lat: 0,
				lng: 0,
			}
			// console.log(location, 'location')
			let that = this
			uni.getLocation({
				success(res) {
					// console.log(res, 'res')
					location.lat = res.latitude
					location.lng = res.longitude
					// console.log(res.latitude, res.longitude, 'res.latitude,res.longituderes.latitude,res.longitude')
					// 根据经纬度获取城市
					uni.request({
						url: 'https://apis.map.qq.com/ws/geocoder/v1/',
						data: {
							location: `${res.latitude},${res.longitude}`,
							key: 'LNKBZ-7K2K4-FBTUF-F4EDL-DL3CH-T4FDB'
						},
						success(res) {
							console.log(res, 'res', 'https://apis.map.qq.com/ws/geocoder/v1/')
							// that.city = res.data.result.ad_info.city
							that.provinceList.filter(item => {
								// console.log(item.name, res.data.result.ad_info.province, 'item.name, res.data.result.ad_info.city')
								if (item.name === res.data.result.ad_info.province) {
									that.city = res.data.result.ad_info.city
									that.province = res.data.result.ad_info.province
									// that.getArea(item)
									that.getCity(item)
								}
							})
						}
					})
					that.location = location
				},
				fail(err) {
					console.log(err, 'err')
					that.location = location
					// that.getList()
					if (err.errMsg === 'getLocation:fail 频繁调用会增加电量损耗，可考虑使用 wx.onLocationChange 监听地理位置变化') {
						uni.showToast({
							title: '请勿频繁定位',
							icon: 'none'
						})
					}
					if (err.errMsg === 'getLocation:fail auth deny') {
						// 未授权
						uni.showToast({
							title: '无法定位，请重新获取位置信息',
							icon: 'none'
						})
						authDenyCb && authDenyCb()
						self.isLocated = false
					}
					if (err.errMsg === 'getLocation:fail:ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF') {
						uni.showModal({
							content: '请开启手机定位服务',
							showCancel: false
						})
					}
				}
			})
		},
		// 业主列表
		getMasterList() {
			let obj = {
				token: uni.getStorageSync('token'),
				lat: this.location.lat, // 35.11067
				lng: this.location.lng, // 118.36353
				distance: this.distance, // 0不限，距离
				city: this.city, // 城市
			}
			this.$http('config.room_user', obj, '').then(res => {
				console.log(res, 'res')
				this.list = res.data.data
			})
		},
	},
	// 以下是生命周期钩子   注：没用到的钩子请自行删除
	/**
	 * 在实例初始化之后，组件属性计算之前，如data属性等
	 */
	beforeCreate() { },
	/**
	 * 组件实例创建完成，属性已绑定，但DOM还未生成，$ el属性还不存在
	 */
	created() {
		this.getProvince() // 获取省份
		// this.getLocation() // 获取当前位置
		// this.getCity() // 获取地区
		// this.getArea() // 获取区域
	},
	/**
	 * 在挂载开始之前被调用：相关的 render 函数首次被调用。
	 */
	beforeMount() { },
	/**
	 * el 被新创建的 vm.$ el 替换，并挂载到实例上去之后调用该钩子。
	 * 如果 root 实例挂载了一个文档内元素，当 mounted 被调用时 vm.$ el 也在文档内。
	 */
	mounted() { },
	/**
	 * 数据更新时调用，发生在虚拟 DOM 重新渲染和打补丁之前。
	 * 你可以在这个钩子中进一步地更改状态，这不会触发附加的重渲染过程。
	 */
	beforeUpdate() { },
	/**
	 * 由于数据更改导致的虚拟 DOM 重新渲染和打补丁，在这之后会调用该钩子。
	 * 当这个钩子被调用时，组件 DOM 已经更新，所以你现在可以执行依赖于 DOM 的操作。
	 */
	updated() { },
	/**
	 * keep-alive 组件激活时调用。 仅针对keep-alive 组件有效
	 */
	activated() { },
	/**
	 * keep-alive 组件停用时调用。 仅针对keep-alive 组件有效
	 */
	deactivated() { },
	/**
	 * 实例销毁之前调用。在这一步，实例仍然完全可用。
	 */
	beforeDestroy() { },
	/**
	 * Vue 实例销毁后调用。调用后，Vue 实例指示的所有东西都会解绑定，
	 * 所有的事件监听器会被移除，所有的子实例也会被销毁。
	 */
	destroyed() { }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后，父组件的style样式将不会渗透到子组件中，-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响，-->
<style scoped lang="scss">
.index-list-masterfilter {
	min-height: 720rpx;

	&-header {
		height: 120rpx;
		text-align: center;
		font-size: 28rpx;
		font-family: PingFang SC-Medium, PingFang SC;
		font-weight: 500;
		color: #2E3033;
		line-height: 120rpx;
	}

	&-main {
		margin-bottom: 80rpx;
	}

	&-footer {
		padding: 32rpx 0;
	}
}
</style>
